#ifndef SOFT_TIMER_H
#define SOFT_TIMER_H

#include "stm32f4xx_hal.h"  // 或你自己的 HAL 头文件
#include <stdint.h>
#include <stdbool.h>

// 定时器回调函数类型
typedef void (*soft_timer_callback_t)(void *arg);

// 定时器模式
typedef enum {
    SOFT_TIMER_ONESHOT,
    SOFT_TIMER_PERIODIC
} soft_timer_mode_t;

// 定时器状态
typedef enum {
    SOFT_TIMER_STOPPED,
    SOFT_TIMER_RUNNING
} soft_timer_state_t;

// 定时器结构体
typedef struct {
    uint32_t        timeout;     // 定时时间 (ms)
    uint32_t        start_time;  // 启动时的 tick 值
    soft_timer_mode_t mode;      // 模式：周期 or 一次性
    soft_timer_state_t state;    // 状态：运行 or 停止
    bool            active;      // 是否被使用
    soft_timer_callback_t callback; // 回调函数
    void            *arg;        // 回调参数
} soft_timer_t;

// 最大支持的定时器数量
#define MAX_TIMERS      8

// API 函数声明
void soft_timer_init(void);
soft_timer_t* soft_timer_create(uint32_t timeout_ms, soft_timer_mode_t mode,
                                soft_timer_callback_t cb, void *arg);
bool soft_timer_start(soft_timer_t *timer);
bool soft_timer_stop(soft_timer_t *timer);
void soft_timer_delete(soft_timer_t **timer);
void soft_timer_process(void);  // 需要周期性调用，比如在 main loop 或 1ms 中断中

#endif /* SOFT_TIMER_H */